package com.bw.controller;

import cn.hutool.core.util.StrUtil;
import com.bw.common.JwtUtils;
import com.bw.common.Md5Utils;
import com.bw.entity.User;
import com.bw.mapper.UserMapper;
import com.bw.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;

@Controller
public class LoginController {


    @Autowired
    UserService userService;

    /**
     * 返回一个登录页面
     *
     * @return
     */
    @RequestMapping("/loginPage.do")
    public String loginPage() {
        System.out.println("-------------------------");
        return "login";
    }

    /**
     * 执行登录  jsr303参数校验
     *
     * @return
     */
    @RequestMapping("/login.do")
    public String login(@Valid User loginUser, BindingResult result, Model model, HttpServletRequest request, HttpServletResponse response) {
        if (result.hasErrors()) {//如果校验之后有异常信息
            String error = result.getAllErrors().get(0).getDefaultMessage();// 随机取出一个异常信息
            model.addAttribute("error", error); // 把异常信息 塞到页面中
            return "login"; // 重新回到登录页面
        }

        // 判断用户名是否存在
        User userDB = userService.selectByName(loginUser.getName());
        if (userDB == null) {
            model.addAttribute("error", "用户名不存在"); // 把异常信息 塞到页面中
            return "login"; // 重新回到登录页面
        }

        // 密码是否正确
        String loginUserPassword = loginUser.getPassword(); // 用户输入的密码 123456
        String password = userDB.getPassword(); // 数据库里的密码   015e20bdd093034e97363ef1439a72dc
        String salt = userDB.getSalt(); // 数据库里的盐  qwer
        // 加密用户输入的密码 和数据库里的盐
        String md5String = Md5Utils.getMD5String(loginUserPassword + salt); // 加密 123456 + qwer
        if (!md5String.equals(password)){  //
            model.addAttribute("error","密码错误");
            return "login";
        }
        // 根据用户信息 加密得到token  制作学生证
        String token = JwtUtils.createToken(userDB);
        // 新建一个cookie 把token放入cookie里
        Cookie cookie = new Cookie("token", token);
        // 把cookie返回给浏览器
        response.addCookie(cookie);


        model.addAttribute("name",loginUser.getName());

        return "success";
    }

}
